/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.base.eao.EaoException;
import br.jm.acionista.entity.TipoTransferencia;
import br.jm.acionista.sistema.eao.TipoTransferenciaEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class TipoTransferenciaBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private TipoTransferencia selectedTipoTransferencia;
    private LazyDataModel<TipoTransferencia> lazyModel;
    private TipoTransferenciaEao tipoTransferenciaJpa;
    private int nTotalReg;
    private List<TipoTransferencia> tipoTransferencia = new ArrayList<TipoTransferencia>();
    private boolean disable;
    private String cSql;
    private String cPagina;

    public TipoTransferenciaBean() {
        tipoTransferenciaJpa = TipoTransferenciaEao.getInstance();
        selectedTipoTransferencia = new TipoTransferencia();

        this.disable = true;
        
        cPagina = FacesContext.getCurrentInstance().getViewRoot().getViewId();

        cSql = null;
        if (cPagina.matches(".*relatorioTransferencia.*")) {
            cSql = "id_tipo <= 12 ";
        } else if (cPagina.matches(".*transferencia.*")) {
            cSql = "id_tipo >= 2 and id_tipo <= 5 ";
        }

        lazyModel = new LazyDataModel<TipoTransferencia>() {

            @Override
            public List<TipoTransferencia> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {

                List<TipoTransferencia> lazyTipoTransferencia = new ArrayList<TipoTransferencia>();

                try {
                    lazyTipoTransferencia = tipoTransferenciaJpa.getNative("TipoTransferencia", first, pageSize, sortField, sortOrder, filters, null, cSql);
                } catch (Exception ex) {
                    Logger.getLogger(TipoTransferenciaBean.class.getName()).log(Level.SEVERE, null, ex);
                }

                return lazyTipoTransferencia;
            }
        };

        nTotalReg = tipoTransferenciaJpa.getCount("TipoTransferencia");
        if (nTotalReg == 0) {
            nTotalReg = 1;
            selectedTipoTransferencia = new TipoTransferencia();
        }
        lazyModel.setRowCount(nTotalReg);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            selectedTipoTransferencia.setIdTipo(null);
            tipoTransferenciaJpa.create(selectedTipoTransferencia);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipo Transferencia Inserido com Sucesso",
                    selectedTipoTransferencia.getDscTipo());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir" + selectedTipoTransferencia.getDscTipo(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            tipoTransferenciaJpa.edit(selectedTipoTransferencia);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipo Transferencia Alterado com Sucesso",
                    selectedTipoTransferencia.getDscTipo());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedTipoTransferencia.getDscTipo(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            tipoTransferenciaJpa.destroy(selectedTipoTransferencia);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipo Transferencia Excluido com Sucesso",
                    selectedTipoTransferencia.getDscTipo());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedTipoTransferencia.getDscTipo(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<TipoTransferencia> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<TipoTransferencia> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public TipoTransferencia getSelectedTipoTransferencia() {
        if (selectedTipoTransferencia == null) {
            selectedTipoTransferencia = new TipoTransferencia();
        }

        return selectedTipoTransferencia;
    }

    public void setSelectedTipoTransferencia(TipoTransferencia selectedTipoTransferencia) {
        this.selectedTipoTransferencia = selectedTipoTransferencia;
    }

    public final void completeTipo() {
        try {
            this.tipoTransferencia = tipoTransferenciaJpa.get("select object(o) from TipoTransferencia as o");
        } catch (EaoException ex) {
            Logger.getLogger(TipoTransferenciaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<TipoTransferencia> getTipoTransferencia() {
        return tipoTransferencia;
    }

    public void setTipoTransferencia(List<TipoTransferencia> tipoTransferencia) {
        this.tipoTransferencia = tipoTransferencia;
    }

    public TipoTransferencia novo() {
        this.disable = false;
        selectedTipoTransferencia = new TipoTransferencia();

        return selectedTipoTransferencia;
    }

    public void onRowSelectTipo(SelectEvent event) {
        this.disable = true;
    }

    public boolean isDisable() {
        return disable;
    }

    public void setDisable(boolean disable) {
        this.disable = disable;
    }
}
